package chapter15;

import java.util.EnumSet;
import java.util.HashSet;
import java.util.Set;

public class Sets {
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public static <T> Set<T> union(Set<T> es1,Set<T> es2)
	{
		Set<T> result = null;
		if(es1 instanceof EnumSet<?>||es2 instanceof EnumSet<?>)
		{
			if(es1 instanceof EnumSet<?>)
			{
				result=((EnumSet) es1).clone();
				result.addAll(es2);
			}
			else if(es2 instanceof EnumSet<?>)
			{
				result=((EnumSet) es2).clone();
				result.addAll(es1);
			}
		}
		else 
		{
			result=new HashSet<T>(es1);
			result.addAll(es2);
		}
		return result;
		
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Set<Colors> s1=EnumSet.of(Colors.YELLOW, Colors.GREEN);
		Set<Colors> s2=new HashSet<Colors>();
		s2.add(Colors.RED);
		Set<Colors> result=union(s1, s2);
		for (Colors c : result) {
			System.out.println(c.toString());
		}
		
	}

}
